// readonly修饰符:首先是一个关键字,对类中的属性成员进行修饰,修饰符后，该属性成员，就不能在外部被随意的修改了
// 构造函数中，可以对只读的属性成员的数据进行修改
// 如果构造函数中没有任何的参数，类中的属性成员此时已经使用了readonly进行修饰了，那么外部也是不能对这个属性值进行修改
// 构造函数中的参数可以使用readonly进行修饰，一旦修饰，那么该类中就有了这个只读的成员属性了，外部可以访问，但是不能修改
// 构造函数的参数可以使用public及privite和protected，无论是哪个进行修饰，该类中都会自动的添加这么一个属性成员
;
(function () {
    // 定义一个类
    // class Person {
    //   // readonly name: string = '哈哈说' // 初始值
    //   readonly name: string
    //   constructor(name: string = '哈哈哈') {
    //     this.name = name
    //   }
    //   sayHi() {
    //     console.log('哈哈哈', this.name)
    //     // 类中的普通方法中，也是不能修改readonly修饰的成员属性值
    //     // this.name = "哈哈"
    //   }
    // }
    // // 实例化对象
    // const person: Person = new Person('哈哈')
    // // person.name = '小明' // 此时无法修改，因为name属性时只读的
    // console.log(person)
    // readonly 修饰类中的构造函数中的参数(参数属性)
    // class Person {
    // 构造函数
    // 构造函数中的name参数，一旦使用readonly进行修饰后，那么该name属性参数可以叫参数属性
    // 构造函数中的name参数，一旦使用readonly进行修饰后，那么Person中就有了一个name的属性成员
    // 构造函数中的name参数，一旦使用readonly进行修饰后，外部也是无法修改类中的name属性成员值的
    // constructor(readonly name: string = '哈哈哈') {}
    // 构造函数中的name参数，一旦使用了public进行修饰后，那么Person类中就有了一个公共的name属性成员了
    // constructor(public name: string = '哈哈哈') {}
    // 构造函数中的name参数，一旦使用了private进行修饰后，那么Person类中就有了一个私有的name属性成员了
    // constructor(private name: string = '哈哈哈') {}
    // 构造函数中的name参数，一旦使用了protected进行修饰后，那么Person类中就有了一个受保护的name属性成员了(只能是本类和派生类中访问和使用)
    //   constructor(protected name: string = '哈哈哈') {}
    //   sayHi() {
    //     console.log('哈哈哈', this.name)
    //   }
    // }
    // // 实例化对象
    // const person: Person = new Person('哈哈')
    // // person.name = 'sssss'
    // console.log(person)
})();
